【MIND】In-Network Memory Management for Disaggregated Data Centers

#edge-resources #distributed-system

Abstract

用 programmable network switches 实现高效的共享内存(RAM)系统。

Intro

features:

设计原则

  1. Decouple (解耦) memory management functionalities to ensure each can be optimized for their specific goals.
  2. Leverage global view of the disaggregated memory subsystem at a centralized control plane to compute optimal policies for each memory management functionality.
  3. Exploit network-centric hardware primitives (利用已有的网络硬件技术) at the programmable switch ASIC to efficiently realize policies computed using P2

Background

相关技术

Programmable switches

Distributed shared memory (DSM)

分布式内存设计的挑战 Disaggregated Memory Designs and Challenges

i)低延迟和高吞吐量的内存访问
ii)一个 transparent? 的内存抽象,支持内存和计算资源的弹性扩展,而无需修改现有应用程序

已有的方案难以同时实现上述两个目标。(tradeoff)

  1. (transparent)以计算为中心:每个计算单元有内存空间的一部分,但是内存空间本身是分布式的
  2. (transparent)以内存为中心:将元数据放置在各自的内存单元上,仍然会像以前一样因为一个内存访问而遭受多个顺序远程请求,唯一的区别是原先访问单个 home node 的操作现在被定向到多个分布式的 memory blades。
  3. (non-transparent)虽然以上的开销可以通过在 computing blades 上缓存数据而减少,但是需要对元数据进行一致性处理,从而增加了额外的设计复杂性和性能开销。

MIND

Pasted image 20231011085202.png

Flow

CPU blades 运行用户线程.用户线程可能会发起内存读写请求,CPU blades会把这些请求发送给 Control Plane

如果在 CPU blade cache 中没找到需要的数据,CPU blade 会发送一个 page fault 信号,并且通过 RDMA requests 从 memory blades 中 fetch 这个 page

在 MIND 的设计中,memory blades 只需要响应 requests for physical pages。权限控制、cache directory 等元数据的维护都在 programmable switch 中进行。因此,memory blades 不需要 CPU


details of MIND

Memory Allocation & Addressing

传统的 virtual memory 使用固定大小的 pages 作为 translation 和 protection 的基本单元,这导致 pages 的大小既不能太大(memory fragmentation 太大),也不能太小(需要的 translation entries 太多)。

MIND 解耦 address translation 和 protection:在 translation 时 blade-based,在 protection 时 vma based

virtual memory area (vma) is identified by the base virtual address and length of the area, e.g., <0x00007f84b862d33b, 0x400> for a 1KB area.

storage-efficient address translation:MIND 使用 a single global virtual address space,所有进程都共享一个内存空间,因此 translation entries 可以被共享。

Balanced memory allocation & reduced fragmentation:因为 control plane 有 global view of allocations,因此 memory allocation 和传统的操作系统内存分配策略相同,非常高效。

Isolation:由于所有内存共享相同空间,因此需要处理内存冲突和非法访问,在 MIND 中这是 programmable switch 控制的。

Transparency via outlier entries:通过异常条目实现透明度。MIND 的一对一映射不排除支持嵌入二进制文件中的静态虚拟地址或操作系统优化(例如页面迁移,将页面从一个内存刀片移动到另一个内存刀片)的未修改应用程序。MIND 为对应于静态虚拟地址迁移内存的物理内存区域单独维护的基于范围的地址转换。这些异常条目被简洁地存储在交换机 TCAM 中,TCAM 的最长前缀匹配(LPM)属性确保在转换虚拟地址时仅考虑最具体的条目(即具有最长前缀),从而确保正确性。

Memory Protection

由于 MIND 解耦了memory translation 和 protection,因此它使用一个单独的表格来存储数据平面中的内存保护条目(protection tablle)。因此,应用程序可以为任意大小的 VMA 分配访问权限.

Fine-grained, flexible memory protection:小细粒度、灵活的内存保护。MIND 支持两个关键抽象:protection domains(保护域) 和 permission classes(权限类)。保护域标识能(或不能)访问某块特定内存区域的权限的实体,而权限类标识实体可以对内存区域执行的操作(如修改、读取)

MIND 提供一些 api:指定 protection domain identifier (PDID) 、 virtual memory area (vma) 和 permision class,即将 <PDID,vma> => PC 作为一条规则存储到 protection table 中。

在实体请求访问内存时,需要匹配对应的 <PDID, vma>。根据设计原则 3,MIND 采用==以 TCAM 为基础的并行匹配(原先用于 IP 子网)==来高效匹配。

Optimizing for TCAM storageTCAM 只能匹配 2 的幂次的大小范围,而 MIND 的 vma 的大小是任意的。所以我们把 MIND 中规则的 vma 的大小作二进制分解。每条大小为 s 的 MIND 规则最多分解为 logs 条 TCAM 中的规则。这会影响效率。但是由于系统的基本库请求的内存大都为 2 的幂次大小的,所以我们可以设置两个 control plane. 第 1 个 control plane 处理大小为 2 的幂次的内存请求,第 2 个处理大小不是 2 的幂次的内存请求。

Cache Coherence

传统的 cache coherence 策略在 cache performance 和 storage efficiency 之间产生矛盾:要减少 directory 中的 entries 数量就要增大 cache granularity(更大的 memory blocks)

MIND :

  1. 解耦调用数据cache coherence 的颗粒度:调用数据以 4KB 为单位,coherence 的数据单位大小不固定
  2. control plane 对 memory 有一个整体的把控:经过 1 中的解耦,coherence 的数据单位大小仍然面临矛盾(区域较大的话 false invalidation counts 会增加,区域较小的话记录条目会增加)。对此,MIND开始时每个 directory entry 都有一个非常大的内存区域;当由于 false invalidation 导致的开销很高时,它会分割区域并创建一个新的 directory entry。重复这一过程直到开销低于预定阈值或者区域大小达到 4 KB(Bounded Splitting algorithm

In-Network Coherence Protocol

由于我们采用了 MSI coherence,而 MSI协议中的几个状态转换需要向有共享访问区域的CPU刀片生成无效请求以确保正确性。为了以网络的方式高效地实现这一点,我们利用大多数交换机原生支持的 multicast functionality (多播功能)。
为机架中的所有CPU刀片创建一个多播组,并向该组发送包含共享者列表的无效请求,并在 switch data plane 的 egress path 中丢弃不指向共享者列表中的 CPU blade 的请求。

how MIND handles failures

我们现在讨论MIND如何处理我们解耦架构中不同组件的故障。CPU、内存刀片和交换机故障。MIND对于CPU和内存刀片故障的容错并没有创新:先前工作 中开发的容错机制可以直接适应我们的设计。为了处理交换机故障,我们在备份交换机上一致地复制控制平面——在故障发生时,使用控制平面状态在备份交换机上重建数据平面状态。由于控制平面只有在元数据操作(例如,系统调用)时才会不经常更新,因此这种复制所增加的开销最小。通信故障。MIND使用ACK和超时来检测数据包丢失。当内存访问触发无效化时,请求计算刀片等待所有共享者成功无效化的ACK,并在超时时重新发送请求。如果计算刀片在预定义的重传次数后仍未收到ACK,它会向交换机控制平面发送相应虚拟地址的重置消息。这反过来会强制所有计算刀片清除该地址的数据,并在数据平面中删除相应的缓存目录条目。当计算刀片在缓存一致性状态转换过程中失败时,这种重置机制可以防止死锁。